// #pragma once

// #include <iostream>
// #include <string>
// #include <unordered_map>
// // 对用户登录的管理 -> 对 Session 管理(先描述再组织)
 
// class Session
// {
// private:
//     std::string name;
//     bool islogin;
//     uint64_t session_id;
//     // 其他信息
// };

// class SessionManager
// {
// public:
//     void CreateSession(uint16_t )
//     {

//     }
//     void DeleteSession(uint16_t )
//     {

//     }
//     void SearchSession(uint16_t )
//     {

//     }
// private:
//     std::unordered_map<uint16_t, Session*> _session;
// };


#pragma once

#include <iostream>
#include <string>
#include <cstring>
#include <unordered_map>
#include <unistd.h>

class Session
{
public:
    Session(const std::string &username, bool islogin)
        :_username(username),
         _islogin(islogin)
    {
        _create_time = time(nullptr);
    }

    ~Session() {}
private:
    std::string _username;
    bool _islogin;
    uint64_t _create_time;
    // 其他信息：浏览痕迹
    bool _isvip;
};

using session_ptr = std::shared_ptr<Session>;

class SessionManager
{
public: 
    SessionManager()
    {
        srand(time(nullptr) ^ getpid());
    }

    std::string AddSession(session_ptr s)
    {
        uint32_t randomid = rand() + time(nullptr);     // 随机数 + 时间数，实际有形成sessionid的库，比如 boost uuid库，或者其他第三方库
        std::string sessionid = std::to_string(randomid);
        _session.insert(std::make_pair(sessionid, s));
        return sessionid;
    }

    void DeleteSession(const std::string &sessionid)
    {
        auto iter = _session.find(sessionid);
        if(iter != _session.end()) _session.erase(iter);
    }

    session_ptr GetSession(const std::string &sessionid)
    {
        auto iter = _session.find(sessionid);
        if(iter != _session.end()) return _session[sessionid];
        return nullptr;
    }

    ~SessionManager() {}
private:
    std::unordered_map<std::string, session_ptr> _session;
};

extern SessionManager _session_manager; // 声明

// session.cpp
SessionManager _session_manager; // 定义
